<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of xml
 *
 * @author root
 */
class xml {

    //put your code here
    static public $hash = '';
    static public $arrayTemp = array();
    static public $obj = '';

    static function arraytoXml($data, $rootNodeName = 'envelope', $xml = null) {
        
        $data = (array) $data;
        
        if ($xml == null) {
            $xml = simplexml_load_string("<$rootNodeName />"); /* "<?xml version='1.0' encoding='utf-8'?><$rootNodeName />"); */
        }

        // faz o loop no array
        foreach ($data as $key => $value) {
            // se for indice numerico ele renomeia o indice
            if (is_numeric($key)) {
                $key = "unknownNode_" . (string) $key;
            }

            // substituir qualquer coisa não alfa numérico
            //$key = preg_replace('/[^a-z]/i', '', $key);

            if (is_array($value)) {
                $node = $xml->addChild($key);
                self::arraytoXml($value, $rootNodeName, $node);
            } else { 
                $value = self::removeCaracteres(utf8_decode(htmlentities($value)));//utf8_decode(htmlentities(($value)))); //utf8_encode
                $xml->addChild($key, $value);
            }
        }
        
        return $xml->asXML();
    }
    static function removeCaracteres($str) { 
         
        $ini = array('á','à','ã','â','é','ê','í','ó','ô','õ','ú','ü','ç','Á','À','Ã','Â','É','Ê','Í','Ó','Ô','Õ','Ú','Ü','Ç','&ordm;','&deg;','¨','&uml;');
        $fim = array('a','a','a','a','e','e','i','o','o','o','u','u','c','A','A','A','A','E','E','I','O','O','O','U'.'U','C',''      ,''     ,'' ,''      );
        
        $srt = str_replace($ini, $fim, $str);
        
        // retira quebra de linha
        
        $str = preg_replace("/\r?\n/","", $str);
        
        $str = preg_replace('/\s/','',$str);
        
        $str =  str_replace(array('\n','\r','<br>'),array(' ',' ',' '), $str);
        
        return $srt;
    }
    
    
    static function ajustaVersaoXml($xml) { 
     
        $xml = str_replace(array('<?xml version="1.0"?>'), array(''), $xml);


        $xml = str_replace(array('<unknownNode>', '</unknownNode>'), array('', ''), $xml);

        if(strpos($xml, 'unknownNode_') !== false) { 
            for ($i = 0; $i <= 100; $i++) { 
                $xml = str_replace(array('<unknownNode_' . (string) $i . '>', '</unknownNode_' . (string) $i . '>'), array('', ''), $xml);
                // para sair caso não exista mais ocorrencias
                if(strpos($xml, 'unknownNode_' . (string) ($i + 1)) === false) $i = 100;
            }
        }
       
        if(strpos($xml, 'procedimentosSolicitados_') !== false) { 
            for ($i = 0; $i <= 100; $i++) {
                $xml = str_replace(array('<procedimentosSolicitados_' . (string) $i . '>', '</procedimentosSolicitados_' . (string) $i . '>'), array('<procedimentosSolicitados>', '</procedimentosSolicitados>'), $xml);
                // para sair caso não exista mais ocorrencias
                if(strpos($xml, 'procedimentosSolicitados_' . (string) ($i + 1)) === false) $i = 100;
            }
        }
        
		
		if(strpos($xml, 'procedimentosAdicionais_') !== false) { 
            for ($i = 0; $i <= 100; $i++) {
                $xml = str_replace(array('<procedimentosAdicionais_' . (string) $i . '>', '</procedimentosAdicionais_' . (string) $i . '>'), array('<procedimentosAdicionais>', '</procedimentosAdicionais>'), $xml);
                // para sair caso não exista mais ocorrencias
                if(strpos($xml, 'procedimentosAdicionais_' . (string) ($i + 1)) === false) $i = 100;
            }
        }
		
        if(strpos($xml, 'opmeSolicitadas_') !== false) {
            for ($i = 0; $i <= 100; $i++) {
                $xml = str_replace(array('<opmeSolicitadas_' . (string) $i . '>', '</opmeSolicitadas_' . (string) $i . '>'), array('<opmeSolicitadas>', '</opmeSolicitadas>'), $xml);
                // para sair caso não exista mais ocorrencias
                if(strpos($xml, 'opmeSolicitadas_' . (string) ($i + 1)) === false) $i = 100;
            }
        }
        
        if(strpos($xml, 'drogasSolicitadas_') !== false) {
            for ($i = 0; $i <= 100; $i++) {
                $xml = str_replace(array('<drogasSolicitadas_' . (string) $i . '>', '</drogasSolicitadas_' . (string) $i . '>'), array('<drogasSolicitadas>', '</drogasSolicitadas>'), $xml);
                // para sair caso não exista mais ocorrencias
                if(strpos($xml, 'drogasSolicitadas_' . (string) ($i + 1)) === false) $i = 100; 
            }
        } 
        
        if(strpos($xml, 'procedimentosComplementares_') !== false) {
            for ($i = 0; $i <= 100; $i++) {
                $xml = str_replace(array('<opmeSolicitadas_' . (string) $i . '>', '</opmeSolicitadas_' . (string) $i . '>'), array('<opmeSolicitadas>', '</opmeSolicitadas>'), $xml);
                // para sair caso não exista mais ocorrencias
                if(strpos($xml, 'opmeSolicitadas_' . (string) ($i + 1)) === false) $i = 100;
            }
        } 
        
        if(strpos($xml, 'procedimentosComplementares_') !== false) {
            for ($i = 0; $i <= 100; $i++) {
                $xml = str_replace(array('<procedimentosComplementares_' . (string) $i . '>', '</procedimentosComplementares_' . (string) $i . '>'), array('<procedimentosComplementares>', '</procedimentosComplementares>'), $xml);
                // para sair caso não exista mais ocorrencias
                if(strpos($xml, 'procedimentosComplementares_' . (string) ($i + 1)) === false) $i = 100;
            }
        
            $xml = str_replace('</procedimentosComplementares><procedimentosComplementares>','', $xml);
        } 
        
        $xml = str_replace(array('&',';'), array('',''), $xml); 
        
        $xml = str_replace(array('Array'), array(''), $xml);
        
        $xml = trim($xml);
        
        return $xml;
    }
    
    static function ajustaVersaoXmlKey($xml,$key) {
        
        $xml = str_replace(array('<?xml version="1.0"?>'), array(''), $xml);

        $xml = str_replace(array('<unknownNode>', '</unknownNode>'), array('', ''), $xml);
                
        if($key == 'opme'){
            if(strpos($xml, 'opmeSolicitadas_') !== false) {
               for ($i = 0; $i <= 100; $i++) {
                   $xml = str_replace(array('<opmeSolicitadas_' . (string) $i . '>', '</opmeSolicitadas_' . (string) $i . '>'), array('<opmeSolicitadas>', '</opmeSolicitadas>'), $xml);
                   // para sair caso não exista mais ocorrencias
                   if(strpos($xml, 'opmeSolicitadas_' . (string) ($i + 1)) === false) $i = 100;
               }
            }
        }
        
        if($key == 'quimio'){
            if(strpos($xml, 'drogasSolicitadas_') !== false) {
                for ($i = 0; $i <= 100; $i++) {
                    $xml = str_replace(array('<drogasSolicitadas_' . (string) $i . '>', '</drogasSolicitadas_' . (string) $i . '>'), array('<drogasSolicitadas>', '</drogasSolicitadas>'), $xml);
                    // para sair caso não exista mais ocorrencias
                    if(strpos($xml, 'drogasSolicitadas_' . (string) ($i + 1)) === false) $i = 100; 
                }
            } 
        }

        $xml = str_replace(array('&',';'), array('',''), $xml); 
        
        $xml = str_replace(array('Array'), array(''), $xml);
        
        //$xml = trim($xml);
        
        return $xml;
        
    }
    
    
    static function xmlToArray($xml, $main_heading = '') {
        $deXml = simplexml_load_string($xml);
        $deJson = json_encode($deXml);
        $xml_array = json_decode($deJson, TRUE);
        if (!empty($main_heading)) {
            $returned = $xml_array[$main_heading];
            return $returned;
        } else {
            return $xml_array;
        }
    }
    
    static function hashToArray($array, $hash = '') {
        
        self::$hash = $hash; 
        
        foreach ($array as $key => $val) {

            if (is_array($val)) {
                self::hashToArray($val,  self::$hash);
            } else {
                if($key != 'hash')
                    self::$hash .= $val; 
            }
        }
        //echo self::$hash.'<br>';
        return  md5(self::$hash);
    }
    
    static function corrigeArrayVazio($array, $arrayTemp) {
        
        self::$arrayTemp = $arrayTemp; 
        
        foreach ($array as $key => $val) {
            
            if (is_array($val)) {
                if(empty($val)){  
                    //self::$arrayTemp[$key] = '';
                    self::corrigeArrayVazio($val,self::$arrayTemp);
                }
                else self::corrigeArrayVazio($val,self::$arrayTemp);       
            } else {
                self::$arrayTemp[$key] = $val; 
            }
        }
        return self::$arrayTemp;
    }
    
    static function objectToArray($data) 
    {
        if(is_array($data) || is_object($data))
        {
            $result = array();
            foreach ($data as $key => $value)
            {
                $result[$key] = self::objectToArray($value);
            }
            return $result;
        }
        return $data;
    }
    
    static function objectToArray2($data) { 
        return @json_decode(@json_encode($data),1); 
    } 
}

?>
